package fifteenth_day;

/**
 *
 给定一个32位的 有符号 整数num，将num中的数字部分反转，最后返回反转的结果
 1.只反转数字部分，符号位部分不反转
 2.反转后整数num超过 32 位的有符号整数的范围 [−2^31,  2^31 − 1] ，返回 0
 3.假设本题不允许存储 64 位整数(有符号或无符号，即C++不能使用long long ，Java不能使用long等)

 数据范围:
 -2^31 <= x <= 2^31-1

 */
public class Reverse {
    /**
     *
     * @param x int整型
     * @return int整型
     */
    public static int reverse (int x) {
        // 数学法
        int prev = 0;
        int next = 0;
        while (x != 0) {
            next = x % 10;
            if (prev > Integer.MAX_VALUE / 10 || (prev == Integer.MAX_VALUE / 10 && next > 7)) {
                return 0;
            }
            if (prev < Integer.MIN_VALUE / 10 || (prev == Integer.MIN_VALUE / 10 && next < -8)) {
                return 0;
            }
            prev = prev * 10 + next;
            x /= 10;
        }
        return prev;
    }

    public static void main(String[] args) {
        int x = 1147483649;
        System.out.println(reverse(x));
    }
}
